<?php

require_once(BaseConfig::LoadClass('objeto_base.class.php'        ));
require_once(BaseConfig::LoadClass('filtro.class.php'             ));
require_once(BaseConfig::LoadClass('abc.class.php'                ));
require_once(BaseConfig::LoadClass('plugin_abc.class.php'         ));
require_once(BaseConfig::LoadClass('cotizador_extendido.class.php'));
require_once(BaseConfig::LoadClass('log.class.php'                ));

class CiudadColonias extends ObjetoBase {
  var $intIdCiudad   ;
  var $intIdEdo      ;
  var $strNombre     ;
  var $strCP         ;
  var $intIdColonia  ;
  var $fltDescMaximo ;
  var $intNoCotiza   ;
  var $intIdMunicipio;
  var $intIdPais     ;
  var $strCodigoTabla;
  var $intOrden      ;
  
  function CiudadColonias($intIdCiudadColonia = 0) {
    $arrMapaDatos = Array();
    
    $arrMapaDatos['id_ciudad'   ] = Array('NombreVariable' => 'intIdCiudad'   , 'TipoVariable' => 'N');
    $arrMapaDatos['id_estado'   ] = Array('NombreVariable' => 'intIdEdo'      , 'TipoVariable' => 'N');
    $arrMapaDatos['nombre'      ] = Array('NombreVariable' => 'strNombre'     , 'TipoVariable' => 'S');
    $arrMapaDatos['cp'          ] = Array('NombreVariable' => 'strCP'         , 'TipoVariable' => 'S');
    $arrMapaDatos['id_colonia'  ] = Array('NombreVariable' => 'intIdColonia'  , 'TipoVariable' => 'N');
    $arrMapaDatos['desc_maximo' ] = Array('NombreVariable' => 'fltDescMaximo' , 'TipoVariable' => 'N');
    $arrMapaDatos['no_cotiza'   ] = Array('NombreVariable' => 'intNoCotiza'   , 'TipoVariable' => 'N');
    $arrMapaDatos['id_municipio'] = Array('NombreVariable' => 'intIdMunicipio', 'TipoVariable' => 'N');
    $arrMapaDatos['id_pais'     ] = Array('NombreVariable' => 'intIdPais'     , 'TipoVariable' => 'N');
    $arrMapaDatos['codigo_tabla'] = Array('NombreVariable' => 'strCodigoTabla', 'TipoVariable' => 'S');
    $arrMapaDatos['orden'       ] = Array('NombreVariable' => 'intOrden'      , 'TipoVariable' => 'N');
    
    $this->__ArmarDatosPrivados('cat_ciudad_colonias', $arrMapaDatos, 'id_ciudad');
    $this->SeleccionarPorIndice($intIdCiudadColonia);
  }
}

class FiltroCiudadColonias extends Filtro {
  function FiltroCiudadColonias() {
    $arrProceso['nombre'      ] = "Nombre"       ;
    $arrProceso['id_estado'   ] = "Estado"       ;
    $arrProceso['id_pais'     ] = "Pais"         ;
    $arrProceso['codigo_tabla'] = "Codigo Tabla" ;
    $arrProceso['orden'       ] = "Orden"        ;
    $arrProceso['cp'          ] = "Codigo Postal";
    $arrProceso['id_colonia'  ] = "Colonia"      ;
    $arrProceso['desc_maximo' ] = "Desc. Maximo" ;
    $arrProceso['no_cotiza'   ] = "No. Cotiza"   ;
    $arrProceso['id_municipio'] = "Municipio"    ;
    
    $arrReferencias["id_pais"]["datos"] = array("10" => "Mexico");
    
    $arrReferencias["id_estado"]["tabla"]["nombre"] = "cat_estados";
    $arrReferencias["id_estado"]["tabla"]["indice"] = "id_estado"  ;
    $arrReferencias["id_estado"]["tabla"]["desc"  ] = "nombre"     ;
    
    parent::CrearFiltro("cat_ciudad_colonias", "id_ciudad", $arrProceso, "Busqueda", "", "orden ASC", "CiudadColonias", $arrReferencias);
  }
}

class PluginABC_CiudadColonias extends PluginABC {
  function PluginABC_CiudadColonias() {
    $this->strNombreBoton   = "Obtener Ciudad - Colonias desde WEB Service";
    $this->bolLlevaDosPasos = false;
  }
  
  function EjecutarPlugin() {
    Variables::SmallTimeLap(true, "PluginEjec");
    $oCotizador  = new CotizadorExtendido();
    $oConecta    = new Conecta();
//    $strConsulta = "TRUNCATE TABLE cat_ciudad_colonias";
//    $oConecta->Consulta($strConsulta);
    
    $strConsulta       = "SELECT id_estado, id_municipio, id_colonia, id_ciudad FROM cat_colonias WHERE id_estado = 9";
    $oConecta->Consulta($strConsulta);
    $arrColonias       = $oConecta->GetCompleteRes();
    $strRes            = "";
    $intContadorCargas = 0;
    $oCiudadColonia    = new CiudadColonias();
    $oCiudadColonia->__strNombreIndice = "";
    $oCiudadColonia->__arrMapaTipos["id_ciudad"] = "N";
    
    $intActual   = 0;
    $intTotal    = count($arrColonias);
    $i           = 0;
    $intOmitidos = 0;
    foreach($arrColonias as $arrInfoRes) {
      set_time_limit(10);
      
      // Ver que esta ciudad no este ya en el catalogo
//      $strConsulta = "SELECT * FROM cat_ciudad_colonias WHERE id_estado = {$arrInfoRes["id_estado"]} AND id_municipio = {$arrInfoRes["id_municipio"]} AND id_colonia = {$arrInfoRes["id_colonia"]}";
      $strConsulta = "SELECT * FROM cat_ciudad_colonias WHERE id_estado = {$arrInfoRes["id_estado"]} AND id_municipio = {$arrInfoRes["id_municipio"]} AND id_ciudad = {$arrInfoRes["id_ciudad"]}";
      $oConecta->Consulta($strConsulta);
      if($oConecta->Field('nombre')) {
        // Ya existe en la base de datos: omitir
        $intOmitidos++;
        if($intOmitidos > 1000) {
//          break;
        }
      } else {
        
        $intActual++;
        Log::AgregarQuickLog("Prueba", "Paso $intActual de $intTotal (" . sprintf("%0.2f", ($intActual / $intTotal) * 100) . "%)");
        
        $oCotizador->ObtenerCatalogoCiudadColonia($arrInfoRes["id_estado"], $arrInfoRes["id_colonia"], $arrInfoRes["id_municipio"]);
        
        $arrRespuesta = $oCotizador->ObtenerArregloRespuesta();
        $i++;
        $j = 0;
        foreach($arrRespuesta as $arrInfoCol) {
          if($arrInfoCol["id_ciudad"] == 0) continue;
          $arrInfoCol["id_municipio"] = $arrInfoRes["id_municipio"];
          $oCiudadColonia->LimpiarObjeto();
          $oCiudadColonia->LlenarObjeto($arrInfoCol);
          $oCiudadColonia->GuardarObjeto();
          $intContadorCargas++;
          $j++;
        }
        
        if($intContadorCargas > 1000) {
          break;
        }
      }
    }
    $strRes .= "</tr>";
    $strRes .= "</table>";
    
    $fltLapTime = Variables::SmallTimeLap(false, "PluginEjec");
    $strUnidadMedidaLap = "segundos";
    if($fltLapTime > 180) {
      $fltLapTime /= 60;
      $strUnidadMedidaLap = "minutos";
      if($fltLapTime >= 120) {
        $fltLapTime /= 60;
        $strUnidadMedidaLap = "horas";
      }
    }
    
    $strRes = "<tr><th colspan='3'>Se cargaron $intContadorCargas datos, omitiendo $intOmitidos datos (Tiempo: " . sprintf("%0.4f", $fltLapTime) . " $strUnidadMedidaLap):</th></tr>" . $strRes;
    $strRes = "<table class='TablaReportes'>" . $strRes;
    
    return $strRes;
  }
}

class ABC_CiudadColonias extends ABC_Base {
  function ABC_CiudadColonias() {
    $strClaseBase     = "CiudadColonias"       ;
    $strClaseFiltro   = "FiltroCiudadColonias" ;
    $strCampoMostrar  = "nombre,cp"            ;
    $strOpcionListado = "abc_ciudad_colonias"  ;
    $strOpcionGuardar = "abc_coidad_colonias"  ;
    $strClaseCarga    = ""              ;

    $arrNombresColumnas = array();
    $arrNombresColumnas['nombre'      ] = "Nombre"       ;
    $arrNombresColumnas['id_estado'   ] = "Estado"       ;
    $arrNombresColumnas['id_pais'     ] = "Pais"         ;
    $arrNombresColumnas['codigo_tabla'] = "Codigo Tabla" ;
    $arrNombresColumnas['orden'       ] = "Orden"        ;
    $arrNombresColumnas['cp'          ] = "Codigo Postal";
    $arrNombresColumnas['id_colonia'  ] = "Colonia"      ;
    $arrNombresColumnas['desc_maximo' ] = "Desc. Maximo" ;
    $arrNombresColumnas['no_cotiza'   ] = "No. Cotiza"   ;
    $arrNombresColumnas['id_municipio'] = "Municipio"    ;

    $arrReferencias = array();
    $arrReferencias["id_pais"  ]["datos"] = array("10" => "Mexico");
    
    $arrReferencias["id_estado"]["tabla"]["nombre"] = "cat_estados";
    $arrReferencias["id_estado"]["tabla"]["indice"] = "id_estado"  ;
    $arrReferencias["id_estado"]["tabla"]["desc"  ] = "nombre"     ;
    
    
    $arrPlugIns               = array();
    $arrPlugIns["Globales"][] = "PluginABC_CiudadColonias";
    
    $this->Inicializar($strClaseBase, $arrNombresColumnas, $strOpcionListado, $strOpcionGuardar, $strCampoMostrar, $strClaseFiltro, $arrReferencias, "", $strClaseCarga);
    $this->arrPlugIns = $arrPlugIns;
    
    $this->bolABCLista             = true ;
    $this->bolABCListaOcultarTD    = true ;
    $this->bolPosibleNuevoElemento = false;
    $this->intTipoGuardado         = 1    ;
    $this->intNumeroRes            = 20   ;
    $this->bolSoloLectura          = true ;
    $this->bolOcultarTituloEnLista = false;
    $this->bolABCListaMostrarInfo  = true ;
  }
}

?>